// Example File command script to send four nested CSI frames with different dimensions

// include MIPI data types
# FILE "../CSIDataTypes.txt"

# SUB LinePkt DT line VC
	# HS_PACKET: (DT | (VC<<6)) (line & ffh) ((line >> 8) & ffh) -1
# ENDSUB


# CONST HBLANK = 1000
# CONST VBLANK = 10000

# CONST HACT0 = 640
# CONST HACT1 = 100
# CONST HACT2 = 240
# CONST HACT3 = 500

# CONST VACT0 = 480
# CONST VACT1 = 320
# CONST VACT2 = 240
# CONST VACT3 = 300

# MAX_VACT = VACT0
# IF (VACT1 > MAX_VACT): # MAX_VACT = VACT1: # ENDIF
# IF (VACT2 > MAX_VACT): # MAX_VACT = VACT2: # ENDIF
# IF (VACT3 > MAX_VACT): # MAX_VACT = VACT3: # ENDIF

// vertical blanking
# LP_STATES ACT VBLANK: 3

# HS_PACKET: (DT_FRAME_START | (0<<6)) 0 0 -1
# HS_PACKET: (DT_FRAME_START | (1<<6)) 0 0 -1
# HS_PACKET: (DT_FRAME_START | (2<<6)) 0 0 -1
# HS_PACKET: (DT_FRAME_START | (3<<6)) 0 0 -1

// active lines
# line = 1
# LOOP_START MAX_VACT

	// horizontal blanking
	# LP_STATES ACT HBLANK: 3

	// line for VC0
	# IF (line <= VACT0)
		# CALL LinePkt DT_LINE_START line 0
		# HS_PACKET_PLUS_CRC (DT_RAW8 | (0<<6))
		# i = 0
		# LOOP_START (HACT0 / 2)
			# IF (line & 1)
				(i & ffh) ((255-i) & ffh)
			# ELSE
				((255-i) & ffh) (i & ffh)
			# ENDIF
			# i = i + 1
		# LOOP_END
		# CALL LinePkt DT_LINE_END line 0
	# ENDIF

	// line for VC1
	# IF (line <= VACT1)
		# CALL LinePkt DT_LINE_START line 1
		# HS_PACKET_PLUS_CRC (DT_RGB888 | (1<<6))
		# i = 0
		# LOOP_START HACT1
			i i i
			# i = (i + 1) & ffh
		# LOOP_END
		# CALL LinePkt DT_LINE_END line 1
	# ENDIF

	// line for VC2
	# IF (line <= VACT2)
		# CALL LinePkt DT_LINE_START line 2
		# HS_PACKET_PLUS_CRC (DT_RAW8 | (2<<6))
		# i = 0
		# LOOP_START (HACT2 / 2)
			# IF (line & 1)
				(i & ffh) 80h
			# ELSE
				80h (i & ffh)
			# ENDIF
			# i = i + 1
		# LOOP_END
		# CALL LinePkt DT_LINE_END line 2
	# ENDIF

	// line for VC3
	# IF (line <= VACT3)
		# CALL LinePkt DT_LINE_START line 3
		# HS_PACKET_PLUS_CRC (DT_RGB888 | (3<<6))
		# IF (line < VACT3 / 2)
			*HACT3 (line & ffh) (line & ffh) (line & ffh)
		# ELSE
			*HACT3 ((VACT3-line)&ffh) ((VACT3-line)&ffh) ((VACT3-line)&ffh)
		# ENDIF
		# CALL LinePkt DT_LINE_END line 3
	# ENDIF

	# line = line + 1
# LOOP_END

# HS_PACKET: (DT_FRAME_END | (0<<6)) 0 0 -1
# HS_PACKET: (DT_FRAME_END | (1<<6)) 0 0 -1
# HS_PACKET: (DT_FRAME_END | (2<<6)) 0 0 -1
# HS_PACKET: (DT_FRAME_END | (3<<6)) 0 0 -1

